package com.bz.xtcx.manager.service;

import com.bz.xtcx.manager.comom.XtcxException;
import com.bz.xtcx.manager.entity.*;
import com.bz.xtcx.manager.persist.conditions.*;
import com.bz.xtcx.manager.persist.paging.PageResponse;
import com.bz.xtcx.manager.vo.VoResponse;

public interface IIndexService {

    public User getUser();

    /**
     * 根据Code查询栏目.
     * @param code 栏目Code
     * @return 栏目对象
     * @throws XtcxException 异常
     */
    CmsCategory getCategoryByCode(String code) throws XtcxException;

    /**
     * 根据父栏目Code查询子栏目列表.
     * @param cc 父栏目Code及分页选项
     * @return 查询结果（子目录及子栏目列表）
     * @throws XtcxException 异常
     */
    PageResponse<CmsCategory> listCategoryByParentCode(CategoryCondition cc) throws XtcxException;

    /**
     * 根据父栏目Code查询所属内容列表.
     * @param cc 父栏目Code及分页选项
     * @return 查询结果（内容列表）
     * @throws XtcxException 异常
     */
    PageResponse<CmsContent> listArticleByParentCode(ContentCondition cc) throws XtcxException;

    /**
     * 根据关键字查询内容列表.
     * @param cc 查询条件
     * @return 查询结果（内容列表）
     * @throws XtcxException 异常
     */
    PageResponse<CmsContent> listArticlesByKeyStrOrRecommend(ContentCondition cc) throws XtcxException;

    /**
     * 根据ID查询文章.
     * @param id 文章ID
     * @return 文正内容
     * @throws XtcxException 异常
     */
    CmsContent findArticleById(String id) throws XtcxException;

    /**
     * 读取文章时增加点击数.
     * @param id 文章ID
     * @return 成功更新数
     * @throws XtcxException 异常
     */
    int updArticleClicks(String id) throws XtcxException;

    /**
     * 根据条件查询活动列表.
     * @param ec 查询条件（包括名称、时间及分页条件等）
     * @return 活动列表
     * @throws XtcxException 异常
     */
    PageResponse<CmsExchanges> listExcanges(ExchangeCondition ec) throws XtcxException;

    /**
     * 根据ID查询活动.
     * @param id 活动ID
     * @return 活动内容
     * @throws XtcxException 异常
     */
    CmsExchanges findExchangeById(String id) throws XtcxException;

    /**
     * 活动报名.
     * @param cee 报名信息
     * @return 报名结果
     * @throws XtcxException 异常
     */
    VoResponse enrollExchange(CmsExchangesEnroll cee) throws XtcxException;

    /**
     * 查询专家资源列表.
     * @return 查询结果（专家资源列表）
     * @throws XtcxException 异常
     */
    PageResponse<LibExpert> listExperts(LibCondition cc) throws XtcxException;
    
    
    /**
     * 根据ID查询专家.
     * @param id 专家ID
     * @return 专家信息
     * @throws XtcxException 异常
     */
    LibExpert findExpertById(String id) throws XtcxException;

    /**
     * 是否允许同专家沟通.
     * -1：待通知；0：已通知；1：已接受；2：已拒绝； 3：已超时；4：通知失败； 
     * @param id 专家ID
     * @param userId 申请发起人ID
     * @return 允许沟通的申请数量
     * @throws XtcxException 异常
     */
    int allowCommunicateAboutExpert(String id, String userId) throws XtcxException;

    /**
     * 查询企业资源列表.
     * @return 查询结果（企业资源列表）
     * @throws XtcxException 异常
     */
    PageResponse<LibEnterprise> listEnterprises(LibCondition cc) throws XtcxException;

    /**
     * 根据ID查询企业.
     * @param id 企业ID
     * @return 企业信息
     * @throws XtcxException 异常
     */
    LibEnterprise findEnterpriseById(String id) throws XtcxException;

    /**
     * 查询高校院所资源列表.
     * @return 查询结果（高校院所资源列表）
     * @throws XtcxException 异常
     */
    PageResponse<LibCollege> listColleges(LibCondition cc) throws XtcxException;

    /**
     * 根据ID查询高校院所.
     * @param id 高校院所ID
     * @return 高校院所信息
     * @throws XtcxException 异常
     */
    LibCollege findCollegeById(String id) throws XtcxException;

    /**
     * 查询服务机构资源列表.
     * @return 查询结果（服务机构资源列表）
     * @throws XtcxException 异常
     */
    PageResponse<LibServices> listServices(LibCondition cc) throws XtcxException;

    /**
     * 根据ID查询服务机构.
     * @param id 服务机构ID
     * @return 服务机构信息
     * @throws XtcxException 异常
     */
    LibServices findServiceById(String id) throws XtcxException;
    
    /**
     * 是否允许同服务机构对接
     * -1：待通知；0：已通知；1：已接受；2：已拒绝； 3：已超时；4：通知失败； 
     * @param id 服务机构ID
     * @param userId 申请发起人ID
     * @return 允许沟通的申请数量
     * @throws XtcxException 异常
     */
    int allowCommunicateAboutService(String id, String userId) throws XtcxException;

    /**
     * 查询需求列表.
     * @return 查询结果（需求列表）
     * @throws XtcxException 异常
     */
    PageResponse<LibRequirements> listRequirements(LibCondition cc) throws XtcxException;

    /**
     * 根据ID查询需求.
     * @param id 需求ID
     * @return 需求信息
     * @throws XtcxException 异常
     */
    LibRequirements findRequirementById(String id) throws XtcxException;

    /**
     * 是否允许就需求进行沟通.
     * @param id 需求ID
     * @param userId 申请发起人ID
     * @return 允许沟通的申请数量
     * @throws XtcxException 异常
     */
    int allowCommunicateAboutRequirement(String id, String userId) throws XtcxException;

    /**
     * 查询成果列表.
     * @return 查询结果（成果列表）
     * @throws XtcxException 异常
     */
    PageResponse<LibResults> listHarvests(LibCondition cc) throws XtcxException;

    /**
     * 根据ID查询成果.
     * @param id 成果ID
     * @return 成果信息
     * @throws XtcxException 异常
     */
    LibResults findHarvestById(String id) throws XtcxException;

    /**
     * 是否允许就成果进行沟通.
     * @param id 成果ID
     * @param userId 申请发起人ID
     * @return 允许沟通的申请数量
     * @throws XtcxException 异常
     */
    int allowCommunicateAboutHarvest(String id, String userId) throws XtcxException;
    
    /**
     * 是否允许对接申请
     * @param id
     * @param type
     * @return 
     * @throws XtcxException
     */
    boolean allowCommunicate(String id, int type) throws XtcxException;

    /**
     * 发起对接申请.
     * @param cm 对接信息
     * @return 对接申请发起结果
     * @throws XtcxException 异常
     */
    VoResponse submitMeetingRequest(CmsMeeting cm) throws XtcxException;

    /**
     * 回复对接申请.
     * @param cm 对接信息
     * @return 回复对接申请结果
     * @throws XtcxException 异常
     */
    VoResponse replyMeetingRequest(CmsMeeting cm) throws XtcxException;

    /**
     * 记录网站访问.
     * @param iv 记录数据
     * @return 记录结果
     * @throws XtcxException 异常
     */
    VoResponse recordIndexVisit(IndexVisiter iv) throws XtcxException;

    /**
     * 统计网站访问量.
     * @param countType 统计方式
     * @param vc 统计条件
     * @return 统计结果
     * @throws XtcxException 异常
     */
    VoResponse countIndexVisit(int countType, IndexVisiterCondition vc) throws XtcxException;

    /**
     * 统计网站访问量、对接数、对接成功数、注册用户数.
     * @return 统计结果
     * @throws XtcxException 异常
     */
    VoResponse countIndexVisitAndMeetingAndUser() throws XtcxException;

    /**
     * 根据Token获得登录用户信息.
     * @return 登录用户信息
     * @throws XtcxException 异常
     */
    VoResponse getUserByToken() throws XtcxException;
}
